Convolutional Neural Network (CNN) হলো একটি বিশেষ ধরনের নিউরাল নেটওয়ার্ক যা প্রধানত ইমেজ প্রোসেসিং এবং ইমেজ ক্লাসিফিকেশন সমস্যা সমাধানে ব্যবহৃত হয়। এটি পিক্সেল ডেটার মধ্যে স্থানীয় নির্ভরতা এবং প্যাটার্ন শিখে, ইমেজের বিভিন্ন বৈশিষ্ট্য যেমন প্যাটার্ন, আকৃতি, এবং ফিচারগুলি চিনতে সক্ষম। CNN মডেল সাধারণত বিভিন্ন স্তরের মাধ্যমে তথ্য প্রক্রিয়া করে এবং একটি ইমেজকে বিভিন্ন শ্রেণীতে শ্রেণীবদ্ধ করতে পারে।
এখানে আমরা Image Classification এর জন্য একটি সাধারণ CNN মডেল তৈরি করবো, যা Keras এবং TensorFlow ব্যবহার করবে।
ধাপ ১: প্রয়োজনীয় লাইব্রেরি ইম্পোর্ট করা
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.utils import to_categorical
ধাপ ২: ডেটা লোড এবং প্রক্রিয়াকরণ
এখানে আমরা CIFAR-10 ডেটাসেট ব্যবহার করব, যা 10টি বিভিন্ন শ্রেণীতে বিভক্ত 60,000 সেলফ-লেবেল ইমেজ নিয়ে গঠিত।
# CIFAR-10 ডেটাসেট লোড করা
(X_train, y_train), (X_test, y_test) = cifar10.load_data()
# ডেটা স্কেলিং: পিক্সেল ভ্যালু 0 থেকে 255 এর মধ্যে থাকে, তাই এটিকে 0 থেকে 1 এর মধ্যে নিয়ে আসা হচ্ছে
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0
# লেবেল গুলিকে one-hot encoding এ রূপান্তর করা
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)
ধাপ ৩: CNN মডেল তৈরি করা
এখানে আমরা একটি সাধারণ Convolutional Neural Network (CNN) তৈরি করবো, যা 2টি কনভুলিউশনাল লেয়ার, 2টি ম্যাক্স পুলিং লেয়ার, এবং 1টি ডেন্স লেয়ার থাকবে।
model = Sequential()
# কনভুলিউশনাল লেয়ার (Conv2D)
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(MaxPooling2D(pool_size=(2, 2)))
# দ্বিতীয় কনভুলিউশনাল লেয়ার
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
# তৃতীয় কনভুলিউশনাল লেয়ার
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
# ফ্ল্যাট লেয়ার (Flattening the 3D output to 1D)
model.add(Flatten())
# পূর্ণসংযোগিত লেয়ার (Fully Connected Layer)
model.add(Dense(128, activation='relu'))
# ড্রপআউট লেয়ার (Dropout for regularization)
model.add(Dropout(0.5))
# আউটপুট লেয়ার
model.add(Dense(10, activation='softmax'))
ধাপ ৪: মডেল কম্পাইল করা
CNN মডেল তৈরি হওয়ার পর, এটি কম্পাইল করতে হবে। এখানে আমরা Adam optimizer এবং Categorical Crossentropy লস ফাংশন ব্যবহার করছি।
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
ধাপ ৫: মডেল প্রশিক্ষণ (Training the Model)
এখন, মডেলটি প্রশিক্ষণ শুরু করবো। আমরা X_train এবং y_train ব্যবহার করে মডেলটি প্রশিক্ষণ দেব এবং টেস্ট ডেটা X_test ও y_test দিয়ে মডেলটির পারফরম্যান্স পরীক্ষা করবো।
history = model.fit(X_train, y_train, epochs=10, batch_size=64, validation_data=(X_test, y_test))
ধাপ ৬: মডেল মূল্যায়ন
ট্রেনিংয়ের পর মডেলটি পরীক্ষা করা এবং এর accuracy পরিমাপ করা।
test_loss, test_acc = model.evaluate(X_test, y_test)
print(f"Test accuracy: {test_acc * 100:.2f}%")
ধাপ ৭: মডেল পূর্বানুমান
অবশেষে, মডেলটি নতুন ডেটার উপর পূর্বানুমান করতে ব্যবহার করা যাবে।
# একটি ইমেজের পূর্বানুমান করা
predictions = model.predict(X_test)
# প্রথম টেস্ট ইমেজের শ্রেণী দেখতে
print(f"Predicted class for first test image: {np.argmax(predictions[0])}")
সারাংশ:
- CNN হল একটি শক্তিশালী মডেল যা ইমেজ ক্লাসিফিকেশন কাজে অত্যন্ত কার্যকরী।
- Convolutional Layers (Conv2D) ব্যবহার করে ডেটার বৈশিষ্ট্যগুলি শিখে, Pooling Layers (MaxPooling2D) ডেটার আকার কমিয়ে দেয়, এবং Fully Connected Layers (Dense) শেষ শ্রেণী আউটপুট প্রদান করে।
- Dropout লেয়ারটি মডেলের overfitting প্রতিরোধে সাহায্য করে।
- এই মডেলটি CIFAR-10 ডেটাসেটের উপর পরীক্ষা করা হয়েছে, তবে এটি অন্য যেকোনো ইমেজ ডেটাসেটের জন্য ব্যবহারযোগ্য।
এই কোডটি দিয়ে আপনি একটি CNN মডেল তৈরি এবং প্রশিক্ষণ করতে পারেন, যা ইমেজ ক্লাসিফিকেশন টাস্কে কার্যকরী ফলাফল দিবে।
Read more